package com.ruoyi.finance.service.impl;

import java.util.List;

import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.finance.domain.Customers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.finance.mapper.SupplierMapper;
import com.ruoyi.finance.domain.Supplier;
import com.ruoyi.finance.service.ISupplierService;

/**
 * 供应商管理Service业务层处理
 * 
 * @author 李伟
 * @date 2025-02-26
 */
@Service
public class SupplierServiceImpl implements ISupplierService 
{
    @Autowired
    private SupplierMapper supplierMapper;

    /**
     * 查询供应商管理
     * 
     * @param id 供应商管理主键
     * @return 供应商管理
     */
    @Override
    public Supplier selectSupplierById(Long id)
    {
        return supplierMapper.selectSupplierById(id);
    }

    /**
     * 查询供应商管理列表
     * 
     * @param supplier 供应商管理
     * @return 供应商管理
     */
    @Override
    public List<Supplier> selectSupplierList(Supplier supplier)
    {
        return supplierMapper.selectSupplierList(supplier);
    }

    /**
     * 新增供应商管理
     * 
     * @param supplier 供应商管理
     * @return 结果
     */
    @Override
    public int insertSupplier(Supplier supplier)
    {
// 检查传入的 Supplier 对象是否为空
        if (supplier == null) {
            throw new IllegalArgumentException("供应商信息不能为空");
        }

        // 检查供应商编码是否为空
        if (StringUtils.isEmpty(supplier.getSupplierCode())) {
            throw new IllegalArgumentException("供应商编码不能为空");
        }

        // 检查供应商名称是否为空
        if (StringUtils.isEmpty(supplier.getSupplierName())) {
            throw new IllegalArgumentException("供应商名称不能为空");
        }

        // 检查统一社会信用代码是否为空
        if (StringUtils.isEmpty(supplier.getUnifiedSocialCreditCode())) {
            throw new IllegalArgumentException("统一社会信用代码不能为空");
        }

        // 检查联系人是否为空
        if (StringUtils.isEmpty(supplier.getContactPerson())) {
            throw new IllegalArgumentException("联系人不能为空");
        }

        // 检查联系方式是否为空
        if (StringUtils.isEmpty(supplier.getContactNumber())) {
            throw new IllegalArgumentException("联系方式不能为空");
        }

        // 检查开户行是否为空
        if (StringUtils.isEmpty(supplier.getBank())) {
            throw new IllegalArgumentException("开户行不能为空");
        }

        // 检查账号是否为空
        if (StringUtils.isEmpty(supplier.getAccountNumber())) {
            throw new IllegalArgumentException("账号不能为空");
        }

        // 检查供应商编码是否唯一
        Supplier existingSupplier = supplierMapper.selectSupplierByCode(supplier.getSupplierCode());
        if (existingSupplier != null) {
            throw new RuntimeException("供应商编码已存在");
        }

        // 检查统一社会信用代码格式
        String unifiedSocialCreditCodePattern = "^[A-Za-z0-9]{18}$";
        if (!supplier.getUnifiedSocialCreditCode().matches(unifiedSocialCreditCodePattern)) {
            throw new IllegalArgumentException("统一社会信用代码格式不正确");
        }

        // 检查联系方式格式
        String contactNumberPattern = "^\\d{11}$";
        if (!supplier.getContactNumber().matches(contactNumberPattern)) {
            throw new IllegalArgumentException("联系方式格式不正确");
        }

        // 执行插入操作
        return supplierMapper.insertSupplier(supplier);
    }

    /**
     * 修改供应商管理
     * 
     * @param supplier 供应商管理
     * @return 结果
     */
    @Override
    public int updateSupplier(Supplier supplier)
    {
        return supplierMapper.updateSupplier(supplier);
    }

    /**
     * 批量删除供应商管理
     * 
     * @param ids 需要删除的供应商管理主键
     * @return 结果
     */
    @Override
    public int deleteSupplierByIds(Long[] ids)
    {
        return supplierMapper.deleteSupplierByIds(ids);
    }

    /**
     * 删除供应商管理信息
     * 
     * @param id 供应商管理主键
     * @return 结果
     */
    @Override
    public int deleteSupplierById(Long id)
    {
        return supplierMapper.deleteSupplierById(id);
    }

    @Override
    public int qiyongSupplierByIds(Long[] ids) {
        // 检查 ids 是否为空或无效
        if (ids == null || ids.length == 0) {
            throw new IllegalArgumentException("传入的供应商ID列表不能为空");
        }

        // 定义状态常量
        final int STATUS_DISABLED = 1;

        // 遍历 ids，检查是否已有供应商被禁用
        for (Long id : ids) {
            Supplier supplier = supplierMapper.selectSupplierById(id);
            // 检查 supplier 是否为 null
            if (supplier == null) {
                throw new RuntimeException("供应商ID为 " + id + " 的记录不存在");
            }
            // 检查供应商状态
            if (supplier.getStaut() == STATUS_DISABLED) {
                throw new RuntimeException("所选供应商中已有供应商"+" 已被启用，请勿重复启用");
            }
        }

        // 执行禁用操作
        for (Long id : ids) {
            supplierMapper.jinyongSupplierByIds(id);
        }

        return 1;
    }

    @Override
    public int jinyongSupplierByIds(Long[] ids) {
        // 检查 ids 是否为空或无效
        if (ids == null || ids.length == 0) {
            throw new IllegalArgumentException("传入的供应商ID列表不能为空");
        }

        // 定义状态常量
        final int STATUS_DISABLED = 2;

        // 遍历 ids，检查是否已有供应商被禁用
        for (Long id : ids) {
            Supplier supplier = supplierMapper.selectSupplierById(id);
            // 检查 supplier 是否为 null
            if (supplier == null) {
                throw new RuntimeException("供应商ID为 " + id + " 的记录不存在");
            }
            // 检查供应商状态
            if (supplier.getStaut() == STATUS_DISABLED) {
                throw new RuntimeException("所选供应商中已有禁用"+" 已被启用，请勿重复禁用");
            }
        }

        // 执行禁用操作
        for (Long id : ids) {
            supplierMapper.jinyongSupplierByIds(id);
        }

        return 1;
    }
}
